﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace BDSim
{
    class TimeSpaceDll
    {

        //--------------------------TimeSpaceDll算法库说明------------------------------------------
        //动态库功能：
        //    1）实现不同时间系统间的转换；
        //    2）实现同一时间系统不同表示形式间的转换；
        //    3）实现不同坐标系统间的转换；
        //    4）实现同一坐标系统不同表示形式间的转换；
        //依赖算法库：
        //    1)CMatrixDLL：矩阵运算
        //    2)PlanetEphDLL：计算行星位置，计算格林尼治恒星时时使用
        //    3)CInterpolateDLL：拉格朗日插值，计算当前时刻的极移、UT1-UTC时根据外部导入的数据插值
        //--------------------------TimeSpaceDll算法库说明------------------------------------------


        //函数名称：TimeSpaceInit
        //函数功能：导入外部的极移和跳秒文件，row为导入的数据内容的组数
        //返回值:
        //       (1)true:导入成功
        //       (2)false:外部导入为空
        [DllImport("TimeSpaceDll.dll",EntryPoint="TimeSpaceInit",CallingConvention=CallingConvention.Cdecl)]
        unsafe public static extern bool TimeSpaceInit(EOPData* EOPData,int row);

        //函数名称：TimeSpaceEnd
        //函数功能：释放指针
        //返回值:
        //       (1)true:释放成功
        [DllImport("TimeSpaceDll.dll",EntryPoint="TimeSpaceEnd",CallingConvention=CallingConvention.Cdecl)]
        public static extern bool TimeSpaceEnd();

        #region 时间转换
        //////（1）同一时间系统内部的表现形式的转换//////////////

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：CAL2UTC
        //函数功能：UTC的格里历与儒略日进行转换
        //输入:
        //       (1)T    (UTC时） （ flag=1时，是UTC的年月日形式;flag=2时，是UTC的儒略日形式）(T 对应的时间大于1801年1月1号）
        //       (2)flag （标记位 ）（当flag＝1时，由公历计算JD;当flag＝2时，由JD计算公历）
        //输出:无
        //返回值:
        //       (1) 0 超出边界
        //       (2) 1 运行正确
        //其他说明：直接给极移参数赋值
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：(1)UTC2doy1 (2)doy2UTC (3)BDT_JD2WnSec  (4)GPST_JD2WnSec (5)BDT_WnSec2JD (6)GPST_WnSec2JD  (7)GST_WnSec2JD (8)GST_JD2WnSec (9)GLONASST_N4NtHrMinSec2JD (10)GLONASST_JD2N4NtHrMinSec  (11)GLONASST_N4NtHrMinSec2JD (12)TAI2UTC (13)UTC2TAI (14)UTC2TDB (15)TDB2UTC
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="CAL2UTC",CallingConvention=CallingConvention.Cdecl)]
        public static extern int CAL2UTC(out UTCTime T, int flag);	

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2doy1
        //函数功能：UTC的儒略日转年积日、天内秒和年
        //输入:
        //       (1)UTC_JD( UTC时的儒略日形式）(UTC_JD大于2378861.5）
        //输出:
        //       (1)daysec(天内秒） 
        //       (2)iYear(年积日) 
        //       (3)Year(年）(year用4位数表示,比如1996)
        //返回值:
        //        (1) 0 超出边界
        //        (2) 1 运行正确
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC_JD2doy", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC_JD2doy(double UTC_JD, out double daysec, out int iYear, out int Year);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：doy2UTC
        //函数功能：用年积日和天内秒还有年计算儒略日（xieling)
        //输入:
        //       (1)daysec(天内秒) (说明：输入的天内秒要小于86400)
        //       (2)iYear(年积日) (说明：输入的年积日要闰年要不大于366，平年要不大于365,年积日从1开始)
        //       (3)Year (年） 
        //输出:
        //       (1)T (UTCTime 格里历和儒略日都有值）(T 对应的时间大于1801年1月1号）
        //返回值:
        //        (2) 0 超出边界
        //        (3) 1 运行正确
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "doy2UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int doy2UTC(double daysec, int iYear, int Year, out UTCTime T);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：BDT_WnSec2JD
        //函数功能：北斗时的周和周内秒转换为儒历日
        //输入:
        //       (1)WN (周）（WN>=0)
        //       (2)Sec (周内秒）(0<=Sec<604800)
        //输出:
        //       (1)JD (JD>=2453736.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "BDT_WnSec2JD", CallingConvention = CallingConvention.Cdecl)]
        public static extern int BDT_WnSec2JD(int WN, double Sec, out double JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：BDT_JD2WnSec（与BDT_ymdhms2ws相比，精度较低）
        //函数功能：函数功能：北斗时的儒历日转换为周和周内秒（xeiling)
        //输入:
        //       (1)JD(儒略日）(JD对应的儒略日大于(2006,1,1,0,0,0.0,0.1)对应的儒略日) （JD>=2453736.5）
        //输出:
        //       (1)WN (周）
        //       (2)Sec(周内秒）
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "BDT_JD2WnSec", CallingConvention = CallingConvention.Cdecl)]
        public static extern int BDT_JD2WnSec(double JD, out int WN, out double Sec);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GPST_JD2WnSec（与GPST_ymdhms2ws相比，精度较低）
        //函数功能：GPS时的儒历日转换为周和周内秒（xeiling)
        //输入:
        //       (1)JD（儒略日）(JD对应的儒略日大于(1980,1,6,0,0,0.0,0.1)对应的儒略日) （JD>=2444244.5）
        //输出:
        //       (1)WN (周）（WN>=0)
        //       (2)Sec(周内秒）(0<=Sec<604800)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GPST_JD2WnSec", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GPST_JD2WnSec(double JD, out int WN, out double Sec);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GPST_WnSec2JD
        //函数功能：GPS时的周和周内秒转换为儒历日（xeiling)
        //输入:
        //       (1)WN (周）（WN>=0)
        //       (2)Sec (周内秒）(0<=Sec<604800)
        //输出:
        //       (1)JD (JD>=2444244.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GPST_WnSec2JD", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GPST_WnSec2JD(int WN, double Sec, out double JD); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GLONASST_N4NtHrMinSec2JD
        //函数功能： GLONASS 时的N4，Nt,h,m,s转儒略日
        //输入:
        //       (1) N4   (从1996年开始，四年一计数的计数值，从1开始计数（如：1996年，N4=1;2007年，N4=3.)) (1=<N4<=31)  
        //       (2) Nt   (当前时间在该四年计数中，距离起始计数年月日的时间间隔天数（如：1998年1月1日,Nt=732)) (1=<Nt<=1461) 
        //       (3) Hour (小时） (0<=hour<24)  
        //       (4) Min  （分钟）（0<=min<60)
        //       (5) Sec  （秒）（0<=sec<60)
        //输出:
        //       (1)JD  (JD>=2450083.5)

        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GLONASST_N4NtHrMinSec2JD", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GLONASST_N4NtHrMinSec2JD(int N4, int Nt, int Hour, int Min, double Sec, out double JD); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GLONASST_JD2N4NtHrMinSec
        //函数功能： GLONASS 时的儒略日转N4，Nt,h,m,s
        //输入:
        //       (1)JD  （GLONASST的儒略日形式）（JD对应的年大于1996年）(JD>=2450083.5)
        //输出:
        //       (1) N4   (从1996年开始，四年一计数的计数值，从1开始计数（如：1996年，N4=1;2007年，N4=3.)) (1=<N4<=31)  
        //       (2) Nt   (当前时间在该四年计数中，距离起始计数年月日的时间间隔天数（如：1998年1月1日,Nt=732)) (1=<Nt<=1461) 
        //       (3) Hour (小时） (0<=hour<24)  
        //       (4) Min （0<=min<60)
        //       (5) Sec （0<=sec<60)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GLONASST_JD2N4NtHrMinSec", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GLONASST_JD2N4NtHrMinSec(double JD, out int N4, out int Nt, out int Hour, out int Min, out double Sec);


        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GST_WnSec2JD
        //函数功能： Galileo时的周和周内秒转为儒略日
        //输入:/
        //       (1)WN (周）（WN>=0)
        //       (2)Sec (周内秒）(0<=Sec<604800)
        //输出:
        //       (1)JD (JD>=2451412.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GST_WnSec2JD", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GST_WnSec2JD(int WN, double Sec, out double JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GST_JD2WnSec
        //函数功能：Galileo时的儒历日转换为周和周内秒（xeiling)
        //输入:
        //       (1)JD（儒略日）(JD对应的儒略日大于(1999,8,22,0,0,0.0,0.1)对应的儒略日）(JD>=2451412.5)
        //输出:
        //       (1)WN (周）（WN>=0)
        //       (2)Sec(周内秒）(0<=Sec<604800)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GST_JD2WnSec", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GST_JD2WnSec(double JD, out int WN, out double Sec);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：JD2MJD
        //函数功能：根据JD计算MJD
        //输入:
        //       (1)JD(儒略日) (大于2400000.5)
        //输出:
        //       (1)MJD (简略儒略日）(大于0)
        //返回值:
        //       (1)0 超界
        //       (2)1`運行正確

        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "JD2MJD", CallingConvention = CallingConvention.Cdecl)]
        public static extern int JD2MJD(double JD, out double MJD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：MJD2JD
        //函数功能：根据MJD计算JD
        //输入:
        //       (1)MJD(简略儒略日) (大于0)
        //输出:
        //       (1)JD (儒略日）(大于2400000.5)
        //返回值:
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "MJD2JD", CallingConvention = CallingConvention.Cdecl)]
        public static extern int MJD2JD(double MJD, out double JD);



        //////（2）不同时间系统之间的转换///////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2UT1
        //函数功能：根据UTC_JD计算UT1_JD
        //输入:
        //       (1)UTC_JD（UTC的儒略日形式) 
        //输出:
        //       (1)UT1_JD (UT1的儒略日形式）
        //返回值 :
        //       (1)0  转换不正确
        //       (2)1  运行正确 

        //需要不同时刻UT1-UTC的数据
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC2UT1", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC2UT1(double UTC_JD, out double UT1_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UT12UTC
        //函数功能：根据UT1_JD计算UTC_JD
        //输入:
        //       (1)UT1_JD（UT1的儒略日形式）

        //输出:
        //       (1)UTC_JD （UTC的儒略日形式）
        //返回值 :
        //       (1)0 没有在极移文件中找到对应的值
        //       (2)1 计算正确

        //需要不同时刻UT1-UTC的数据
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UT12UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UT12UTC(double UT1_JD, out double UTC_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2TAI
        //函数功能：UTC的JD转TAI
        //输入:
        //       (1)UTC_JD (UTC的儒略日形式)(大于2378861.5)
        //       (2)SetLeapSec （设置的跳秒）
        //输出:
        //       (1)TAI (TAI的儒略日)(大于2378861.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：需要跳秒
        //被本函数调用的函数清单：
        //                    (1)CAL2UTC
        //                    (2)int CalLeapSec(UTC_JD)
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC2TAI", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC2TAI(double UTC_JD, out double TAI);


        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：TAI2UTC
        //函数功能：TAI转UTC_JD
        //输入:
        //       (1)TAI (TAI的儒略日 )(大于2378861.5)
        //输出:
        //       (1)UTC_JD(UTC的儒略日形式 )(大于2378861.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：需要跳秒
        //被本函数调用的函数清单：
        //                    (1)CAL2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "TAI2UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int TAI2UTC(double TAI, out double UTC_JD);


        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2TDB
        //函数功能：UTC转TDB
        //输入:
        //       (1)UTC_JD (UTC的儒略日形式 )(大于1972年对应的儒略日)
        //输出:
        //       (1)TDB_JD （太阳质心力学时的儒略日形式）(大于2378861.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //被本函数调用的函数清单：
        //                    (1)CAL2UTC
        //                    (2)UTC2TAI
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC2TDB", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC2TDB(double UTC_JD, out double TDB_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：TDB2UTC
        //函数功能：TDB转UTC
        //输入:
        //       (1)TDB_JD （太阳质心力学时的儒略日形式）(大于2378861.5)

        //输出:
        //       (1)UTC_JD  (UTC的儒略日形式 )(大于1972年对应的儒略日)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確

        //被本函数调用的函数清单：
        //                    (1)CAL2UTC
        //                    (2)TAI2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "TDB2UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int TDB2UTC(double TDB, out double UTC_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2GPST
        //函数功能：UTC转GPST(xieling)
        //输入:
        //       (1)UTC_JD （UTC的儒略日形式 ）（UTC_JD>(2444244.5+19/86400.0-m_LeapSec/86400.0))
        //输出:
        //       (1) GPST_JD （GPS时的儒略日形式） (GPST_JD>=2444244.5 )
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //被本函数调用的函数清单：
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC2GPST", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC2GPST(double UTC_JD, out double GPST_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GPST2UTC
        //函数功能：GPST转UTC (xieling)
        //输入:
        //       (1)GPST_JD （GPS时的儒略日形式） (GPST_JD>=2444244.5 )
        //输出:
        //       (1) UTC_JD （UTC的儒略日形式） 
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確

        //被本函数调用的函数清单：
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GPST2UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GPST2UTC(double GPST_JD, out double UTC_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2BDT
        //函数功能：UTC转BDT    (XIELING)
        //输入:
        //       (1)UTC_JD （UTC的儒略日形式 ） 
        //输出:
        //       (1)BDT_JD （BDT时的儒略日形式）(BDT_JD>=2453736.5 )
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //被本函数调用的函数清单：
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC2BDT", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC2BDT(double UTC_JD, out double BDT_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：BDT2UTC
        //函数功能：BDT 转UTC  xieling
        //输入:
        //       (1)BDT_JD (BDT时的儒略日形式)(BDT_JD>=2453736.5  )
        //输出:
        //       (1)UTC_JD （UTC的儒略日形式)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //被本函数调用的函数清单：
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "BDT2UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int BDT2UTC(double BDT_JD, out double UTC_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2GST
        //函数功能：UTC转GALLEO系统（xeiling)(有问题需要继续查资料求解）
        //输入:
        //       (1)UTC_JD  (UTC的儒略日形式 )
        //输出:
        //       (1)GST_JD (Galileo的儒略日形式) (GST_JD>=2451412.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確

        //被本函数调用的函数清单：
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC2GST", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC2GST(double UTC_JD, out double GST_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GST2UTC
        //函数功能：GALLEO转UTC(XIELING)(有问题需要继续查资料求解）
        //输入:
        //       (1)GST_JD (Galileo的儒略日形式) (GST_JD>=2451412.5)

        //输出:
        //       (1)UTC_JD  (UTC的儒略日形式)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //被本函数调用的函数清单：
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "GST2UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GST2UTC(double GST_JD, out double UTC_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：UTC2TDT
        //函数功能：UTC转地球质心力学时(XIELING)
        //输入:
        //       (1)UTC_JD （UTC时的儒略日形式）(大于2378861.5)
        //输出:
        //       (1)TDT_JD （地球质心力学时）(大于2378861.5）
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確
        //其他说明：
        //被本函数调用的函数清单：UTC2TAI
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "UTC2TDT", CallingConvention = CallingConvention.Cdecl)]
        public static extern int UTC2TDT(double UTC_JD, out double TDT_JD);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：TDT2UTC
        //函数功能：地球质心力学时转UTC(XIELING)
        //输入:
        //       (1)TDT_JD （地球质心力学时）(大于2378861.5)

        //输出:
        //       (1)UTC_JD （UTC时的儒略日形式）(大于2378861.5)
        //返回值 :
        //       (1)0 超界
        //       (2)1`運行正確

        //其他说明：
        //被本函数调用的函数清单：TAI2UTC
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "TDT2UTC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int TDT2UTC(double TDT_JD, out double UTC_JD);


        //////（3）（原数仿函数，需测，命名有做修改）/////////////////////

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：GPS时的年月日转换成年积日（原数仿算法）
        //输入:
        //       (1) year  年(从1980到2080年）
        //       (2)month  月
        //       (3) day   日
        //输出：
        //    无
        //返回值: 
        //(1)年积日
        //(2) 0 输入的年，月，日超出边界
        //其他说明：无
        //被本函数调用的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "YMD2Doy", CallingConvention = CallingConvention.Cdecl)]
        public static extern int YMD2Doy(int year, int month, int day);	

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：北斗时的年月日时分秒转换成周和周内秒（（原数仿算法）（与BDT_JD2WnSec相比，精度较高）
        //输入:
        //       (1) year  年（年不能小于2006年）
        //       (2)month  月(1-12)
        //       (3) day   日(1-31)
        //       (4) hour  时(0-23)
        //      （5）minute 分(0-59)
        //      （6）second 秒(0-60,不能等于60）
        //输出:
        //        (1) weekno   周
        //        (2)SOW     周内秒
        //返回值:
        //        (1)0 输入的范围超界
        //        (2)1 运算正确
        //被本函数调用的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="BDT_ymdhms2ws",CallingConvention=CallingConvention.Cdecl)]
        public static extern int BDT_ymdhms2ws(int year, int month, int day, int hour, int minute, double second, out int weekno, out double SOW);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：GPS时的年月日时分秒转换成周和周内秒（与GPST_JD2WnSec相比，精度较高）
        //输入:
        //       (1) year  年
        //       (2)month  月
        //       (3) day   日
        //       (4) hour  时
        //      （5）minute 分
        //      （6）second 秒
        //输出:
        //        (1) weekno   周
        //        (2)SOW     周内秒
        //返回值: 
        //        (1)0 输入的范围超界
        //        (2)1 运算正确       
        //其他说明：根据BDT_ymdhms2ws重写的
        //被本函数调用的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="GPST_ymdhms2ws",CallingConvention=CallingConvention.Cdecl)]
        public static extern int GPST_ymdhms2ws(int year, int month, int day, int hour, int minute, double second, out int weekno, out double SOW);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：原子时转换为历书时（原数仿算法）
        //输入:
        //       (1) TAI  原子时
        //输出：
        //     无
        //返回值: 
        //       (1)历书时
        //       (2)0 原子时超界
        //其他说明：无
        //被本函数调用的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="TAI2ET",CallingConvention=CallingConvention.Cdecl)]
        public static extern double TAI2ET(double TAI); 


        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：年月日计算约化儒略日（原数仿算法）
        ////输入:
        //       (1) IYear  年
        //      （2）IMon   月
        //      （3）IDay   日
        // 输出：
        //      无
        //返回值:
        //     (1) 简化儒略日
        //     (2）0 输入范围超界
        //其他说明：无
        //被本函数调用的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
       [DllImport("TimeSpaceDll.dll",EntryPoint="YMD2MJD",CallingConvention=CallingConvention.Cdecl)]
        public static extern double YMD2MJD(int IYear, int IMon, double IDay);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：由年、年积日得到至1980年1月6日0时的GPS周记数（原数仿算法）
        ////输入:
        //       (1) IY  年
        //      （2）Idoy 年积日
        // 输出：
        //       （1）无
        //返回值: 
        //(1)1980年1月6日0时的GPS周记数（周内天在个位，十位以后表示周计数）
        //(2)0 输入超界
        //其他说明：无
        //被本函数调用的函数清单：YMD2MJD
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="GPST_Doy2WN",CallingConvention=CallingConvention.Cdecl)]
       public static extern int GPST_Doy2WN(int IY, int Idoy);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：计算春分点的格林尼治恒星时
        ////输入:
        //       (1) UTC时间系统的JD
        // 输出：
        //       （1）春分点的格林尼治恒星时
        //返回值: 
        //(1)1980年1月6日0时的GPS周记数（周内天在个位，十位以后表示周计数）
        //(2)0 输入超界
        //其他说明：无
        //被本函数调用的函数清单：UTC2UT1  PL_POSITION
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="GetGAST",CallingConvention=CallingConvention.Cdecl)]
        public static extern int GetGAST(double UTC_JD, out  double GAST);//计算春分点的格林尼治恒星时
        /////////////////////////////////////////////////////////坐标转换相关/////////////////////////////////////////////////////

        #endregion 时间转换

        #region 坐标转换
        //////（1）同一坐标系统内部的转换/////////////////////////

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：BLH2XYZ
        //函数功能： 地固系的大地坐标转直角坐标
        //输入:
        //       (1)pos  地固系的大地坐标(pos.B(deg),pos.L(deg),pos.H(m))和速度(pos.v_B(deg/s),pos.v_L(deg/s),pos.v_H(m/s))
        //      （2）ECFname 枚举类型 （用来判断当前是哪一种地固坐标系）
        //输出:
        //       (1)xyz  转换得到的地固系的直角坐标(m)和速度(m/s)
        //返回值 :
        //        (1) 0 B或者 L 超界 
        //       （2）1 运行正确
        //其他说明：无
        //被本函数调用的函数清单： MatrixMult 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "BLH2XYZ", CallingConvention = CallingConvention.Cdecl)]
        public static extern int BLH2XYZ(BLH_PosVel pos, ECFtype ECFname, out NodePosVel xyz);	

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：XYZ2BLH
        //函数功能： 地固系的直角坐标转大地坐标
        //输入:
        //       (1)pos  地固系的直角坐标(m)和速度(m/s)
        //      （2）ECFname 枚举类型 （用来判断当前是哪一种地固坐标系）
        //输出:
        //       (1)blh  转换得到的地固系的大地坐标(pos.B(deg),pos.L(deg),pos.H(m))和速度(pos.v_B(deg/s),pos.v_L(deg/s),pos.v_H(m/s))
        //返回值 :1：运行正确
        //其他说明：无
        //被本函数调用的函数清单： MatrixMult 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "XYZ2BLH", CallingConvention = CallingConvention.Cdecl)]
        public static extern int XYZ2BLH(NodePosVel pos, ECFtype ECFname, out BLH_PosVel blh);		

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：XYZ2Sph
        //函数功能：直角坐标系转球面坐标系
        //输入:
        //       (1)pIn_XYZ  直角坐标系坐标（m)和速度(m/s)
        //输出:
        //       (1)pOut_Sph  转换得到球面坐标系坐标(Sphere_PosVel.delta(deg),Sphere_PosVel.alpha(deg),Sphere_PosVel.d(m))和速度(Sphere_PosVel.delta(deg/s),Sphere_PosVel.alpha(deg/s),Sphere_PosVel.d(m/s))
        //返回值 :1：运行正确
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "XYZ2Sph", CallingConvention = CallingConvention.Cdecl)]
        public static extern int XYZ2Sph(NodePosVel pIn_XYZ, out Sphere_PosVel pOut_Sph);    


        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：Sph2XYZ
        //函数功能：直角坐标系转球面坐标系
        //输入:
        //       (1) pIn_Sph 球面坐标系坐标(Sphere_PosVel.delta(deg),Sphere_PosVel.alpha(deg),Sphere_PosVel.d(m))和速度(Sphere_PosVel.delta(deg/s),Sphere_PosVel.alpha(deg/s),Sphere_PosVel.d(m/s))(赤经的绝对值不能大于Pi)(赤纬的绝对值不大于pi/2)
        //输出:
        //       (1) pOut_XYZ  转换得到的直角坐标系坐标(m)和速度(m/s)
        //返回值 :
        //        (1) 0 赤经或赤纬的输入的超界
        //       （2）1 运行正确
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "Sph2XYZ", CallingConvention = CallingConvention.Cdecl)]
        public static extern int Sph2XYZ(Sphere_PosVel pIn_Sph, out NodePosVel pOut_XYZ);         

        //////（2）不同时间系统之间的转换////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECF2ECI
        //函数功能： ECF的直角坐标转ECI的直角坐标
        //输入:
        //       (1)WGS84     (这里指的是WGS84的直角坐标(m)和速度(m/s))(只需要实现坐标转换时速度可以赋值为0）(WGS84.epoch的儒略日一定要正确且输入）(对应的历元的儒略日大于 0.245601650000000000e+07 ）
        //       (3)Set_NetDeltapsi 
        //       (4)Set_NetDeltepsilo 
        //(3)和(4)都是章动参数（界面设置）程序里面有默认值（传递的参数为0时，就会用程序里面的计算值）
        //输出:
        //       (1)output 转换得到的ECI的直角坐标(m)和速度(m/s)
        //返回值 :无
        //其他说明：
        //        （2） 返回1：正常

        //被本函数调用的函数清单：GetECF2ECIMatrix MatrixMult
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "ECF2ECI", CallingConvention = CallingConvention.Cdecl)]
        public static extern int ECF2ECI(NodePosVel WGS84, double Set_NetDeltapsi, double Set_NetDeltepsilo, out NodePosVel output);	

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECI2ECF
        //函数功能： ECI的直角坐标转ECF的直角坐标
        //输入:
        //       (1)orbit_ECI  ECI的直角坐标(m)和速度(m/s)(orbit_ECI.epoch的儒略日一定要正确且输入） (对应的历元的儒略日大于 0.245601650000000000e+07 ）（2012.3.30）
        //       (3)Set_NetDeltapsi 
        //       (4)Set_NetDeltepsilo  (3)和(4)都是章动参数（界面设置）程序里面有默认值
        //输出:
        //       (1)output 转换得到的ECF(这里指的是WGS84)的直角坐标和速度
        //Return :无
        //其他说明：
        //        （2） 返回1：正常
        //被本函数调用的函数清单：GetECF2ECIMatrix MatrixMult 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
       [DllImport("TimeSpaceDll.dll", EntryPoint = "ECI2ECF", CallingConvention = CallingConvention.Cdecl)]
        public static extern int ECI2ECF(NodePosVel orbit_ECI, double Set_NetDeltapsi, double Set_NetDeltepsilo, out NodePosVel output);	

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：WGS2CGCS
        //函数功能： WGS地固系的直角坐标和速度转CGCS地固系的直角坐标和速度
        //输入:
        //       (1)WGS_pos  WGS地固系的直角坐标(m)和速度(m/s)
        //输出:
        //       (1)CGCS_pos CGCS地固系的直角坐标（m)和速度(m/s)
        //返回值 :
        //       (2)1     计算正确
        //其他说明：无
        //被本函数调用的函数清单： readfile,Frameconvert 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "WGS2CGCS", CallingConvention = CallingConvention.Cdecl)]
       public static extern int WGS2CGCS(NodePosVel WGS_pos, out NodePosVel CGCS_pos); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：WGS2CGCS
        //函数功能： CGCS地固系的直角坐标和速度转WGS地固系的直角坐标和速度
        //输入:
        //       (1)CGCS  CGCS地固系的直角坐标(m)和速度(m/s)
        //输出:
        //       (1)WGS WGS地固系的直角坐标（m)和速度(m/s)
        //返回值 :
        //       (2)1     计算正确
        //其他说明：无
        //被本函数调用的函数清单： readfile,Frameconvertinv 
        //调用本函数的函数清单：无	
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll", EntryPoint = "CGCS2WGS", CallingConvention = CallingConvention.Cdecl)]
        public static extern int CGCS2WGS(NodePosVel CGCS_pos, out NodePosVel WGS_pos); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：CoordConvert_7param
        //函数功能：实现地固坐标系的转换
        //输入:
        //       (1)pInput 待转换的地固系的直角坐标（m)和速度(m/s)
        //       （2）para 7参数 
        //输出:
        //       (1)pOutput 转换得到的地固系的直角坐标(m)和速度(m/s)
        //返回值 :无
        //其他说明：
        //         （1）PZ90转GTRF CoordConvertPara para（-0.091e-6,-1.020e-6,1.745e-6，-0.49,-0.50,-1.57，31e-9）;
        //         （2）pz90转WGS  CoordConvertPara para（-0.076e-6,-0.017e-6,1.728e-6,-0.47,-0.51,-1.56,22e-9);
        //          （3）和这个公式对应的CGCS转WGS的转换参数没找到，只能界面输入参数;实现默认的转换需要调用WGS2CGCS
        //被本函数调用的函数清单： readfile,Frameconvert 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="CoordConvert_7param",CallingConvention=CallingConvention.Cdecl)]
        public static extern void CoordConvert_7param(NodePosVel pInput, CoordConvertPara para, out NodePosVel pOutput);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：CoordConvert_7paramInv
        //函数功能： 实现CoordConvert_7param的逆转换（和上面的7参数是一样的）
        //输入:
        //       (1)pInput 待转换的地固系的直角坐标(m)和速度(m/s)
        //       （2）para 7参数 （和上面的参数一样）
        //输出:
        //       (1)pOutput  转换得到的地固系的直角坐标(m)和速度(m/s)
        //返回值 :无
        //其他说明：
        //         （1）GTRF转PZ90 CoordConvertPara para（-0.091e-6,-1.020e-6,1.745e-6，-0.49,-0.50,-1.57，31e-9）;
        //         （2）WGS转pz90   CoordConvertPara para（-0.076e-6,-0.017e-6,1.728e-6,-0.47,-0.51,-1.56,1+22e-9);
        //         （3）和这个公式对应的WGS转CGCS的转换参数没找到，只能界面输入参数;实现默认的转换需要调用WGS2CGCS
        //被本函数调用的函数清单： readfile,Frameconvert 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="CoordConvert_7paramInv",CallingConvention=CallingConvention.Cdecl)]
        public static extern void CoordConvert_7paramInv(NodePosVel pInput, CoordConvertPara para, out NodePosVel pOutput);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECItoRTN
        //函数功能： ECI的直角坐标转RTN_PosVel
        //输入:
        //       (1)refPoint 参考点的位置(m)和速度(m/s)（参考点是卫星）
        //       (2)ECI 待转换点的惯性系的直角坐标(m)和速度(m/s)
        //输出:
        //       (1) rtn  转换得到得RTN_PosVel坐标（m)和速度(m/s) 

        //返回值 :
        //       (1) 0 卫星位置或者状态不正确
        //       （2）1 计算正常
        //其他说明：无
        //被本函数调用的函数清单：MatrixMult 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="ECItoRTN",CallingConvention=CallingConvention.Cdecl)]
        public static extern int ECItoRTN(NodePosVel refPoint, NodePosVel ECI, out RTN_PosVel rtn);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：RTNtoECI
        //函数功能： RTN的PosVel转换到ECI的直角坐标（m)和速度(m/s)
        //输入:
        //       (1)refPoint 参考点的位置(m)和速度（m/s)（参考点是卫星）
        //       (2)rtn 待转换点的RTN_PosVel坐标(m)和速度(m/s)
        //输出:
        //       (1) ECI  转换得到的惯性系的直角坐标(m)和速度(m/s)

        //返回值 :
        //       (1) 0 卫星位置或者状态不正确
        //       （2）1 计算正常

        //其他说明：无
        //被本函数调用的函数清单：MatrixMult
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
       [DllImport("TimeSpaceDll.dll",EntryPoint="RTNtoECI",CallingConvention=CallingConvention.Cdecl)]
        public static extern int RTNtoECI(NodePosVel refPoint, RTN_PosVel rtn, out NodePosVel ECI);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECF2ENU
        //函数功能： 地固系ECF的直角坐标转ENU
        //输入:
        //       (1)refpoint 参考点的直角坐标位置(m)和速度(m/s)
        //       (3)ECF 待转换点的ECF直角坐标(m)和速度 (m/s)
        //       （2）ECFname 枚举类型 （用来判断当前是哪一种坐标系） 
        //输出:
        //       (1) ENU  转换得到的ENU坐标(m)和速度(m/s)
        //返回值 :无
        //其他说明：无
        //被本函数调用的函数清单：MatrixMult BLH2XYZ
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="ECF2ENU",CallingConvention=CallingConvention.Cdecl)]
       public static extern void ECF2ENU(NodePosVel refpoint, NodePosVel ECF, ECFtype ECFname, out ENU_PosVel ENU); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ENU2ECF
        //函数功能： ENU转地固系的直角坐标
        //输入:
        //       (1)refpoint 参考点的直角坐标位置(m)和速度(m/s)
        //       (3)ENU 待转换点的ENU坐标(m)和速度(m/s)
        //       （2）ECFname 枚举类型 （用来判断当前是哪一种坐标系） 
        //输出:
        //       (1)ECF  转换得到的地固系的直角坐标(m)和速度(m/s)
        //返回值 :无
        //其他说明：无
        //被本函数调用的函数清单：MatrixMult XYZ2BLH
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="ENU2ECF",CallingConvention=CallingConvention.Cdecl)]
        public static extern void ENU2ECF(NodePosVel refpoint, ENU_PosVel ENU, ECFtype ECFname, out NodePosVel ECF); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：nihe7param
        //函数功能：拟合7参数
        //输入:
        //       (1) cord     原始坐标(m) （对应着7参数拟合的输入坐标） （最少4组）
        //      （2）obscord  观测坐标值(m)（就是对应的另外一个坐标系统的测量坐标）（对应着7参数拟合的输出坐标）（最少4组）
        //      （3）num      坐标组数乘以3
        //输出:
        //       (1) para1    拟合得到的7参数
        //       (2)avg_chancha 坐标转换的残差的绝对值的均值

        //返回值 :
        //        (1) 0 输入的坐标组数小于4,或求逆时矩阵不满秩亏
        //        (2）1 运算正确
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        // int nihe7param(double *cord,double *obscord,int num,CoordConvertPara *result,double *avg_chancha); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECI2Element
        //函数功能：ECI的位置和速度转轨道6根数
        //输入:
        //       (1) orbitInfo ECI的位置(m)和速度(m/s)
        //输出:
        //       (1) result  转换得到的轨道6根数（与角有关的单位都是角度）

        //返回值 :无
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="ECI2Element",CallingConvention=CallingConvention.Cdecl)]
        public static extern void ECI2Element(NodePosVel orbitInfo, out Orbit6Element result); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECI2Element12
        //函数功能：ECI的位置和速度转轨道12根数
        //输入:
        //       (1) orbitInfo ECI的位置(m)和速度(m/s)
        //输出:
        //       (1) result  转换得到的轨道12根数（与角有关的单位都是角度）

        //返回值 :无
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="ECI2Element12",CallingConvention=CallingConvention.Cdecl)]
        public static extern void ECI2Element12(NodePosVel orbitInfo, out Orbit12Element result); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：Element2ECI
        //函数功能：轨道6根数转ECI的位置和速度
        //Input:
        //       (1) orbitInfo 轨道6根数(与角有关的单位都是角度）
        //Output:
        //       (1) result  转换得到ECI的直角坐标系坐标(m)和速度(m/s)

        //Return :(0)轨道6根数超出边界值
        //        (1)计算正常
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="Element2ECI",CallingConvention=CallingConvention.Cdecl)]
        public static extern int Element2ECI(Orbit6Element orbitInfo, out NodePosVel result); 


        ////（3）（原数仿函数）//////////////////////////////////

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：轨道6根数转位置和速度（原数仿算法，有功能重复的函数）（目测和Element2ECI的函数是一致）
        //输入:
        //       (1)elem[]  轨道6根数;(a,e,i（deg),w(deg),O(deg),f(deg))
        //输出:
        //        (1) X0   用户位置（m)和速度(m/s)
        //Return :(0)轨道6根数超出边界值
        //        (1)计算正常
        //其他说明：无
        //被本函数调用的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="EllipseToCartesian",CallingConvention=CallingConvention.Cdecl)]
        public static extern int EllipseToCartesian(double[] X0, double[] elem);//轨道6根数转直角坐标的位置和速度



        //************************************************************中间函数*********************************************//

        //ECF2ECI和ECI2ECF的转换需要调用下面2个函数


        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GetECF2ECIMatrix
        //函数功能：计算ECF2ECI的旋转矩阵
        //输入:
        //       (1)IntUTC         (UTC的整数部分）
        //       （2)DouUTC          （UTC的小数部分）
        //       (3)Set_NetDeltapsi   （设置的章动参数）
        //       (4)Set_NetDeltepsilo  （设置的章动参数）
        //       (7)set_m_LeapSec       （设置的跳秒，默认值是36）
        //输出:
        //       (1)ECF2ECIMatrix      ECF2ECI的旋转矩阵
        //       (2)DotECF2ECIMatrix   ECF2ECI的旋转矩阵的倒数（猜测）
        //返回值:
        //       (2)计算正常
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="GetECF2ECIMatrix",CallingConvention=CallingConvention.Cdecl)]
        public static extern int GetECF2ECIMatrix(double IntUTC, double DouUTC, double Set_NetDeltapsi, double Set_NetDeltepsilo, out double ECF2ECIMatrix, out double DotECF2ECIMatrix);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GetECI2ECFMatrix
        //函数功能：计算ECI2ECF的旋转矩阵
        //输入:
        //       (1)IntUTC         (UTC的整数部分）
        //       （2)DouUTC         （UTC的小数部分）
        //       (3)Set_NetDeltapsi  （设置的章动参数）
        //       (4)Set_NetDeltepsilo  （设置的章动参数）
        //       (5)set_m_LeapSec     （设置的跳秒，默认值是36）
        //输出:
        //       (1)ECI2ECFMatrix      ECI2ECF的旋转矩阵
        //       (2)DotECI2ECFMatrix   ECI2ECF的旋转矩阵的倒数（猜测）
        //返回值:
        //       (2) 1 正常计算
        //
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="GetECI2ECFMatrix",CallingConvention=CallingConvention.Cdecl)]
        public static extern int GetECI2ECFMatrix(double IntUTC, double DouUTC, double Set_NetDeltapsi, double Set_NetDeltepsilo, out double ECI2ECFMatrix, out double DotECI2ECFMatrix);


        //Element2ECI和ECI2Element中间计算函数

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：E2M
        //函数功能：偏近点角 E → 平近点角 M
        //输入:
        //       (1)e         轨道椭圆的偏心率
        //      （2）E        卫星的偏近点角(deg)
        //输出:
        //       无
        //返回值:
        //       (1)M		 卫星的平近点角(deg)
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="E2M",CallingConvention=CallingConvention.Cdecl)]
        public static extern double E2M(double e, double E);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：E2f
        //函数功能：偏近点角 E → 真近点角 f
        //输入:
        //       (1)e         轨道椭圆的偏心率
        //      （2）E        卫星的偏近点角(deg)
        //输出:
        //       无
        //返回值:
        //       (1)f		 卫星的真近点角 f(deg)
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="E2f",CallingConvention=CallingConvention.Cdecl)]
        public static extern double E2f(double e, double E);		

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：SetInit_E
        //函数功能：设置初始偏近点角E(这是原来的功能描述，在我看来此函数已知OrbE->e, OrbE->E，OrbE->n，OrbE->w，最后设置（计算）了OrbE->M，OrbE->f，OrbE->t0，OrbE->u）
        //输入:
        //       (1)OrbE       轨道根数（主要是OrbE->e, OrbE->E，OrbE->n，OrbE->w）(单位都是deg)
        //输出:
        //       （2）OrbE     计算得到的轨道根数（主要是OrbE->M，OrbE->f，OrbE->t0，OrbE->u）(单位都是deg)
        //返回值:
        //       (1)无
        //其他说明：无
        //被本函数调用的函数清单：无
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="SetInit_E",CallingConvention=CallingConvention.Cdecl)]
        public static extern void SetInit_E(out Orbit12Element OrbE);	

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：M2f
        //函数功能:平近点角 M(deg)->真近点角 f(deg) 
        //输入:	
        //			(1)e    偏心率
        //          (2)M     平近点角 (deg)
        //输出：无		    

        //返回值：(1)f	真近点角 (deg)

        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="M2f",CallingConvention=CallingConvention.Cdecl)]
        public static extern double M2f(double e, double M);  


        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：f2M
        //函数功能:真近点角 f→偏近点角 M 
        //输入:	
        //			(1)e    偏心率
        //          (2)f     真近点角  (deg)
        //输出：无		    

        //返回值：(1)M	平近点角	 (deg)

        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="f2M",CallingConvention=CallingConvention.Cdecl)]
        public static extern double f2M(double e, double f);      

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：f2E
        //函数功能:真近点角 f→偏近点角 E 
        //输入:	
        //			(1)e    偏心率
        //          (2)f     真近点角 (deg)
        //输出：无		    

        //返回值：(1)E 	偏近点角	 (deg)

        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="f2E",CallingConvention=CallingConvention.Cdecl)]
        public static extern double f2E(double e, double f);       

        //ECI和RTN、EUN转换时的计算矩阵

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECI2RTNMatrix
        //函数功能： 得到ECI2RTN的旋转矩阵
        //输入:
        //       (1)refPoint 参考点的位置(m)和速度（m/s)（参考点是卫星）
        //输出:
        //       (1) ECI2RTNMatrix  得到的ECI2RTN的旋转矩阵

        //返回值 :
        //       (1) 0 卫星位置或者状态不正确
        //       （2）1 计算正常
        //其他说明：无
        //被本函数调用的函数清单：MatrixMult
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="ECI2RTNMatrix",CallingConvention=CallingConvention.Cdecl)]
        public static extern int ECI2RTNMatrix(NodePosVel refPoint, out double ECI2RTNMatrix); 

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：ECF2ENUMatrix
        //函数功能： 得到ECF2ENU的旋转矩阵
        //输入:
        //       (1)refPoint  参考点的位置(m)和速度（m/s)（参考点是地面站）（地固系）
        //       （2)ECFname  地固系的类型
        //输出:
        //       (1) ECF2ENUMatrix  得到的ECF2ENU的旋转矩阵

        //返回值 :无
        //其他说明：无
        //被本函数调用的函数清单：MatrixMult
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        [DllImport("TimeSpaceDll.dll",EntryPoint="ECF2ENUMatrix",CallingConvention=CallingConvention.Cdecl)]
        public static extern void ECF2ENUMatrix(NodePosVel refpoint, ECFtype ECFname, out double ECF2ENUMatrix);
        //***************************************************************************************************************//	
        #endregion 坐标转换
    }
}
